package part18;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author wcj
 * @Date 2021/6/4 15:09
 * @Version 1.0
 */
public class Part1820 {

    private static final int SIZE = 1024;

    /**
     * 新的IO：NIO（JDK4提出的channel和Buffer）,实际上就是利用堆中的DirectByteBuffer对象操作直接内存
     * 因为新的NIO是面向字节的，所以我们使用InputStream和OutputStream继承关系下的FileInputStream和FileOutputStream来
     * 获取通道，也可以使用RandomAccessFile获取通道，需要注意的是我们获取的通道必须和ByteBuffer缓冲器结合使用
     *
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        FileChannel fc = new FileOutputStream("data.txt").getChannel();
        fc.write(ByteBuffer.wrap("Some text".getBytes()));
        fc.close();

        fc = new RandomAccessFile("data.txt", "rw").getChannel();
        fc.position(fc.size());
        fc.write(ByteBuffer.wrap("Some more".getBytes()));
        fc.close();

        fc = new FileInputStream("data.txt").getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(SIZE);
        fc.read(buffer);
        buffer.flip();
        while (buffer.hasRemaining()) {
            System.out.println((char) buffer.get());
        }
    }
}
